import Vue from 'vue'

import 'normalize.css/normalize.css' // A modern alternative to CSS resets
// 抹平不同浏览器的差异的css  安装:npm i normalize.css 2.导入

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

// import locale from 'element-ui/lib/locale/lang/en' // lang i18n
// 国际化语言

import '@/styles/index.scss' // global css

import App from './App'
import store from './store'
import router from './router'

import '@/icons' // icon
// 路由导航守卫文件
import '@/permission' // permission control

// 导入自定义指令文件
import directiveJs from '@/directives'

// 测试v-model的父子传值 导入全局组件 注册组件
import Temp from '@/components/lib/temp.vue'

// 全局注册组件
// import PageTools from '@/components/lib/pageTools.vue'
// Vue.component('PageTools', PageTools)
// 使用vue.ues
import libJS from '@/components/lib/index'

// 注册全局的过滤器
import filters from '@/filters/index'

// 打印指定dom区域 插件注册
import Print from 'vue-print-nb'

// 全局注册mixin
import Mixin from '@/mixin'

// 导入国际化语言处理
import i18n from '@/lang/index'

Vue.mixin(Mixin)

Vue.use(Print)

Object.keys(filters).forEach((item) => {
  Vue.filter(item, filters[item])
})

Vue.use(libJS, '全局注册')

Vue.component('Temp', Temp)
// 注册全局的事件总线 在Vue实例的原型对象上挂载
Vue.prototype.$bus = new Vue()
// 全局注册 自定义指令
// 如果在main中直接
// 遍历对象
// 方式一:for循环
// for (const k in directiveJs) {
//   Vue.directive(k, directiveJs[k])
// }
// 方式二:
// Object.keys({a:1,b:2})==>[a,b]
// Object.values({a:1,b:2})==>[1,2]
// Object.entries({a:1,b:2})==>[[a,1],[b,2]]
Object.keys(directiveJs).forEach((item) => {
  // item是对象中的每一项属性名(此处为一个变量值,所以用[])
  Vue.directive(item, directiveJs[item])
})

/**
 * If you don't want to use mock-server
 * you want to use MockJs for mock api
 * you can execute: mockXHR()
 *
 * Currently MockJs will be used in the production environment,
 * please remove it before going online ! ! !
 */
// 生产环境 使用mock
// if (process.env.NODE_ENV === 'production') {
//   const { mockXHR } = require('../mock')
//   mockXHR()
// }

// set ElementUI lang to EN
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui，按如下方式声明
Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
})

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: (h) => h(App)
})
